﻿// @include "../code/Function.js"
/**
 * @fileOverview 终端记录类<br/> 本类使用console完成记录工作
 * 
 * @version qinglan_Debug 1.0
 * @static
 * @author wxq wxqqh@qq.com
 */
/**
 * 命名空间
 * 
 * @namespace
 * @type Object
 */
window.qinglan = window.qinglan || {};
/**
 * 类型工具命名空间
 * 
 * @namespace
 * @type Object
 */
qinglan.Debug = qinglan.Debug || {};
/**
 * debug初始化函数<br/> 为了在debug模式下ie不报错，重新覆盖window.console对象<br/>
 * 本函数会在加载本文件的时候自动运行
 * 
 * @static
 * @private
 * @type Function
 */
qinglan.Debug.init = (function() {
	if (!window.console) {
		window.console = {};
		var methods = ["log", "debug", "info", "warn", "error", "assert",
				"dir", "dirxml", "group", "groupEnd", "time", "timeEnd",
				"count", "trace", "profile", "profileEnd"];
		for (var i = 0, method; method = methods[i++];)
			window.console[method] = qinglan.Function.emptyFun();
	}
	return true;
})();
/**
 * 是否处于debug调试模式<br/> 在调试模式下会输出调试提示信息
 * 
 * @type Boolean
 */
qinglan.Debug.debugMode = true;
/**
 * 进行log输出
 * 
 * @private
 * @function
 * @param {String}
 *            logger console中的logger类型
 * @param {Object}
 *            args 需要进行log的参数
 */
qinglan.Debug._logger = function(logger, args) {
	if(!qinglan.Debug.debugMode){return ;}
	try {
		console[logger].apply(console, args);
	} catch (e) {
		// workaround for IE9
		try {
			for (var i = 0, arr = []; i < args.length; i++) {
				arr.push(args[i]);
			}
			console[logger](arr.join(' '));
		} catch (e) {
			// opera in old version 
			if (window.opera && opera.postError) {
				opera.postError.call(null,args);
			}
		}
	}
};
/**
 * 进行info类型的log
 * 
 * @public
 * @function
 */
qinglan.Debug.info = function() {
	qinglan.Debug._logger('info', arguments);
};
/**
 * 进行error类型的log
 * 
 * @public
 * @function
 */
qinglan.Debug.error = function() {
	qinglan.Debug._logger('error', arguments);
};
/**
 * 记录断言错误
 * 
 * @public
 * @function
 */
qinglan.Debug.assert = function(expr, text) {
	if (!expr) {
		qinglan.Debug._logger('error', 'assertion failed!', text);
		throw new Error('assertion failed! ' + text);
	}
};